package com.cy;

import org.omg.CORBA.INTERNAL;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;

/**
 * LinkedList实现类
 * 	--1，概述
 * 		是List接口的实现类。
 * 		可以使用List接口的所有方法，也可以扩展。
 * 		底层是一个链表结构，适合增删业务
 * 	--2，创建对象
 * 		LinkedList()
 *           构造一个空列表。
 * 	--3，常用方法
 * 		--继承自Collection接口的方法们
 * 		--继承自List接口的方法们
 * 		--扩展的方法们
 * 			void addFirst(E e)
 * 			          将指定元素插入此列表的开头。
 * 			 void addLast(E e)
 * 			          将指定元素添加到此列表的结尾。
 * 			 E getFirst()
 * 			          返回此列表的第一个元素。
 * 			 E getLast()
 * 			          返回此列表的最后一个元素。
 * 			 boolean offer(E e)
 * 			          将指定元素添加到此列表的末尾（最后一个元素）。
 * 			 boolean offerFirst(E e)
 * 			          在此列表的开头插入指定的元素。
 * 			 boolean offerLast(E e)
 * 			          在此列表末尾插入指定的元素。
 * 			 E peek()
 * 			          获取但不移除此列表的头（第一个元素）。
 * 			 E peekFirst()
 * 			          获取但不移除此列表的第一个元素；如果此列表为空，则返回 null。
 * 			 E peekLast()
 * 			          获取但不移除此列表的最后一个元素；如果此列表为空，则返回 null。
 * 			E poll()
 * 			          获取并移除此列表的头（第一个元素）
 * 			 E pollFirst()
 * 			          获取并移除此列表的第一个元素；如果此列表为空，则返回 null。
 * 			 E pollLast()
 * 			          获取并移除此列表的最后一个元素；如果此列表为空，则返回 null。
 * 			 E removeFirst()
 * 			          移除并返回此列表的第一个元素。
 * 			 E removeLast()
 * 			          移除并返回此列表的最后一个元素。
 */
public class Test6 {
    public static void main(String[] args) {

        LinkedList<Integer> list = new LinkedList<>();
        Collections.addAll(list,1,3,4,6,46,16,5,4,2,5);
        System.out.println(list);
        System.out.println(list.get(0));

        list.addFirst(100);//添加首元素
        list.addLast(200);//添加尾元素
        System.out.println(list);//[100, 1, 3, 4, 6, 46, 16, 5, 4, 2, 5, 200]

        System.out.println(list.getFirst());//获取首元素
        System.out.println(list.getLast());//获取尾元素

        System.out.println(list.removeFirst());//删除首元素
        System.out.println(list.removeLast());//删除尾元素


      //  method();//测试查询效率 Arraylist
        method2();//测试查询效率Linkedlist

    }

    private static void method2() {
        LinkedList<Integer> list =new LinkedList<>();
        for(int i = 0;i<100000;i++){
            list.add(i);
        }
        long start = System.currentTimeMillis();
        for(int i = 0;i<list.size();i++){
            Integer data =list.get(i);
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);//5533ms
    }

    private static void method() {
        ArrayList <Integer> list=new ArrayList<>();
        for(int i = 0;i<100000;i++){
            list.add(i);
        }
        long start = System.currentTimeMillis();
        for(int i = 0;i<list.size();i++){
            Integer data =list.get(i);
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);//5ms
    }
}
